CREATE TABLE ALUMNO
(
		IDALUMNO 		NUMBER(8),
		CURP 			VARCHAR2(18) 	CONSTRAINT CURP_NN   NOT NULL,
		NOMBREALU		VARCHAR2(55) 	CONSTRAINT ALUMPM_NN NOT NULL,
		APELLIDOP		VARCHAR2(45) 	CONSTRAINT ALUMPA_NN NOT NULL,
		APELLIDOM		VARCHAR2(45) 	CONSTRAINT ALUMSA_NN NOT NULL,
		SEXO			CHAR 			CONSTRAINT SEXO_ANN	 NOT NULL,
		FECHANAC		DATE		 	CONSTRAINT FECHANAC_NN  NOT NULL,
		ESTADO		    VARCHAR2(45)    CONSTRAINT ESTADO_NN 	NOT NULL,
		MUNICIPIO 		VARCHAR2(45) 	CONSTRAINT MUNICIPIO_NN NOT NULL,
		RFC 			CHAR(13),
		CONSTRAINT IDALUMNO_PK PRIMARY KEY (IDALUMNO),
		CONSTRAINT SEXO_A CHECK(SEXO IN ('M','H'))
);

CREATE TABLE RESPONSABLE
(
		IDRESPONSABLE 	NUMBER(8),
		NOMBRERESP	 	VARCHAR2(55) 	CONSTRAINT NOMBRERESP_NN NOT NULL,
		APELLIDOP 		VARCHAR2(45)	CONSTRAINT RESPONPA_NN 	 NOT NULL,
		APELLIDOM 		VARCHAR2(45) 	CONSTRAINT RESPONSA_NN 	 NOT NULL,
		SEXO 			CHAR 			CONSTRAINT SEXO_RNN 	 NOT NULL,
		EDAD 			NUMBER(2) 		CONSTRAINT EDAD_RNN 	 NOT NULL,
		PARENTESCO 		VARCHAR2(45)	CONSTRAINT PARENTESCO_NN NOT NULL,
		CALLE 			VARCHAR2(45) 	CONSTRAINT CALLE_NN 	 NOT NULL,
		COLONIA 		VARCHAR2(45) 	CONSTRAINT COLONIA_NN 	 NOT NULL,
		NUMERO 			NUMBER(6) 		CONSTRAINT NUMERO_NN 	 NOT NULL,
		MOVIL 			NUMBER(15),
		CONSTRAINT IDRESPONSABLE_PK PRIMARY KEY(IDRESPONSABLE),
		CONSTRAINT SEXO_R CHECK(SEXO IN ('M','H')),
		CONSTRAINT EDAD_RRANGO CHECK(EDAD<50 AND EDAD>15)		
);

CREATE TABLE TELEFONOHORARIO
(
		IDRESPONSABLE 	NUMBER(8),
		TELEFONO 		NUMBER(10) 		CONSTRAINT TELEFONO_NN NOT NULL,
		HORARIO 		VARCHAR2(45) 	CONSTRAINT HORARIO_NN  NOT NULL,
		CONSTRAINT TIDRESPONSABLE_FK FOREIGN KEY(IDRESPONSABLE) REFERENCES RESPONSABLE ON DELETE CASCADE
);


CREATE TABLE ALUMNO_RESPONSABLE
(
	IDALUMNO			NUMBER(8),
	IDRESPONSABLE 		NUMBER(8),
	CONSTRAINT IDALUMNO_FK FOREIGN KEY(IDALUMNO) REFERENCES ALUMNO,
	CONSTRAINT A_RIDRESPONSABLE_FK FOREIGN KEY(IDRESPONSABLE) REFERENCES RESPONSABLE ON DELETE SET NULL
);

CREATE TABLE TUTOR
(
		RFC 			CHAR(13),
		IDRESPONSABLE 	NUMBER(8) CONSTRAINT T_IDRESPONSABLE_NN NOT NULL,
		CONSTRAINT RFC_PK PRIMARY KEY(RFC),
		CONSTRAINT TUTORIDRESPONSABLE_FK FOREIGN KEY(IDRESPONSABLE) REFERENCES RESPONSABLE ON DELETE CASCADE
);

ALTER TABLE ALUMNO ADD CONSTRAINT ARFC_FK  FOREIGN KEY(RFC) REFERENCES TUTOR;

CREATE TABLE  INSCRIPCION
(
		IDINSCRIPCION 		NUMBER(8),
		CICLOESCOLAR 		VARCHAR2(20) 	CONSTRAINT CICLOESCOLAR_NN NOT NULL,
		FECHAINSCRIPCION 	DATE 			CONSTRAINT FECHAINSCRIPCION_NN NOT NULL,
		MENSUALIDADESCOLEGIATURA NUMBER(2)   	CONSTRAINT NUMEROMENSUALIDADES_NN NOT NULL,
		IDALUMNO 			NUMBER(8)		CONSTRAINT I_IDALUMNO_NN NOT NULL,
		IDNIVEL 		NUMBER(8)			CONSTRAINT I_IDNIVEL_NN 	NOT NULL,
		IDGRADO			NUMBER(8)			CONSTRAINT I_IDGRADO_NN 	NOT NULL,
		CONSTRAINT IDINSCRIPCION_PK PRIMARY KEY(IDINSCRIPCION),
		CONSTRAINT NUM_MENS CHECK(MENSUALIDADESCOLEGIATURA IN (1,2,3,6,10,12))
);


ALTER TABLE INSCRIPCION ADD CONSTRAINT IIDALUMNO_FK FOREIGN KEY(IDALUMNO) REFERENCES ALUMNO; 

CREATE TABLE NIVEL
(
		IDNIVEL 		NUMBER(8),
		NIVEL			VARCHAR2(20) 		CONSTRAINT NIVEL_NN NOT NULL,
		CONSTRAINT IDNIVEL_PK PRIMARY KEY(IDNIVEL),
		CONSTRAINT NIVELES_UNICOS UNIQUE(NIVEL)
);

CREATE TABLE NIVEL_GRADO
(
		IDNIVEL 		NUMBER(8),
		IDGRADO			NUMBER(8)		CONSTRAINT IDGRADO_NN 	NOT NULL,
		CONSTRAINT IDNIVEL_FK FOREIGN KEY(IDNIVEL) REFERENCES NIVEL,
		CONSTRAINT NIVEL_GRADO_PK PRIMARY KEY(IDNIVEL,IDGRADO)
);

ALTER TABLE INSCRIPCION ADD CONSTRAINT I_IDNIVEL_GRADO_FK FOREIGN KEY(IDNIVEL,IDGRADO) REFERENCES NIVEL_GRADO; 

CREATE TABLE GRUPO
(
		IDGRUPO 		NUMBER(8),
		GRUPO 			VARCHAR2(3) 	CONSTRAINT GRUPO_NN 	NOT NULL,
		IDNIVEL 		NUMBER(8)		CONSTRAINT GIDNIVEL_NN 	NOT NULL,
		IDGRADO			NUMBER(8)		CONSTRAINT GIDGRADO_NN 	NOT NULL,
		CONSTRAINT NIVGRAD_GPO FOREIGN KEY(IDNIVEL,IDGRADO) REFERENCES NIVEL_GRADO,
		CONSTRAINT IDGRUPO_PK 	PRIMARY KEY(IDGRUPO)
);

--EL CONSTRAINT SRVC_TIPO_U ES PARA QUE NO REPITA SERVICIOS AL INSERTAR
CREATE TABLE SERVICIO
(
		IDSERVICIO 		NUMBER(8),
		TIPO 			VARCHAR2(45	)	CONSTRAINT TIPO_NN 			NOT NULL,
		PERIODOPAGO		NUMBER(2)		CONSTRAINT PERIODOPAGO_NN 	NOT NULL,
		CONSTRAINT SRVC_TIPO_U UNIQUE(TIPO,PERIODOPAGO),
		CONSTRAINT IDSERVICIO_PK 	PRIMARY KEY(IDSERVICIO)
);

CREATE TABLE GRADO_SERVICIO
(
		PRECIO 			NUMBER(12,2) 	CONSTRAINT PRECIO_NN 		NOT NULL,
		IDNIVEL 		NUMBER(8)		CONSTRAINT GSIDNIVEL_NN 	NOT NULL,
		IDGRADO 		NUMBER(8)		CONSTRAINT GSIDGRADO_NN 	NOT NULL,
		IDSERVICIO 		NUMBER(8)		CONSTRAINT GSIDSERVICIO_NN 	NOT NULL,
		CONSTRAINT GS_U UNIQUE(PRECIO,IDNIVEL,IDGRADO,IDSERVICIO),
		CONSTRAINT GRAD_SRVCE_FK FOREIGN KEY(IDNIVEL,IDGRADO) REFERENCES NIVEL_GRADO,
		CONSTRAINT GS_SRVCE_FK FOREIGN KEY(IDSERVICIO) REFERENCES SERVICIO
);

--TALAS NUEVAS
--CARGO ES CAMPO RECURSIVO Y PUEDE SER NULL
--LA LLAVE FORANEA C_SRVCE_FK ES PARA QUE SÓLO CONTENGA SERVICIOS EXISTENTES
--FECHAPAGO NO PUEDE SER NOT NULL, YA QUE SE PAGA DESPÙES
CREATE TABLE CARGO
(
	IDCARGO		NUMBER(8),
	FECHACARGO 	DATE  	CONSTRAINT FECHACARGO_NN 	NOT NULL,
	FECHAVEN 	DATE  	CONSTRAINT FECHAVEN_NN 		NOT NULL,
	FECHAPAGO 	DATE,
	IMPORTE 	NUMBER(12,2) CONSTRAINT IMPORTE_NN 	NOT NULL,
	ABONO 		NUMBER(12,2) DEFAULT 0,
	CVS 		CHAR(2),
	CARGO 		NUMBER(8),
	IDINSCRIPCION NUMBER(8) CONSTRAINT C_IDINSCRIPCION_NN 	NOT NULL,
	IDSERVICIO    NUMBER(8) CONSTRAINT C_IDSERVICIO_NN 	NOT NULL,
	CONSTRAINT IDCARGO_PK PRIMARY KEY(IDCARGO),
	CONSTRAINT C_INSCRIP_FK FOREIGN KEY(IDINSCRIPCION) REFERENCES INSCRIPCION,
	CONSTRAINT C_SRVCE_FK FOREIGN KEY(IDSERVICIO) REFERENCES SERVICIO
);

CREATE TABLE DESCUENTO
(
	IDDESCUENTO 	NUMBER(8),
	FECHADESC 		DATE 			CONSTRAINT FECHADESC_NN NOT NULL,
	IMPORTE 		NUMBER(12,2) 	CONSTRAINT IMPORTE_D_NN NOT NULL,
	APLICADO 		CHAR(2) 		DEFAULT 'NO',
	IDCARGO 		NUMBER(8) 		CONSTRAINT CARGO_NN NOT NULL,
	CARGOAPLICADO   NUMBER(8),
	CONSTRAINT IDDESCUENTO_PK PRIMARY KEY(IDDESCUENTO),
	CONSTRAINT CARGOAPLICADO_FK FOREIGN KEY(CARGOAPLICADO) REFERENCES CARGO(IDCARGO),
	CONSTRAINT IDCARGO_FK FOREIGN KEY(IDCARGO) REFERENCES CARGO(IDCARGO)
);

--##########################################################################################
--##########################################################################################
--									PROCEDIMIENTOS
--##########################################################################################
--##########################################################################################


--#########################################################################################
--SERVICIOS
--#########################################################################################
--1ERA PARTE: SECUENCIA SERVICIOS
CREATE SEQUENCE AUTO_IDSERVICIO
INCREMENT BY 1 MINVALUE 10000001;


--2DA PARTE: ALTA SERVICIOS
CREATE OR REPLACE PROCEDURE ALTA_SERVCIO(VTIPO IN VARCHAR2,VPERIODOPAGO IN NUMBER)
AS
	VTIPO_ACTUAL VARCHAR2(45);
BEGIN
		SELECT TIPO INTO VTIPO_ACTUAL FROM SERVICIO
		WHERE TIPO=VTIPO AND PERIODOPAGO=VPERIODOPAGO;
		IF (VTIPO_ACTUAL IS NOT NULL) THEN
			DBMS_OUTPUT.PUT_LINE('EL SERVICIO YA EXISTE, NO PUEDE SER DUPLICADO');
		END IF;
		EXCEPTION
		WHEN NO_DATA_FOUND THEN
			INSERT INTO SERVICIO(IDSERVICIO,TIPO,PERIODOPAGO)
			VALUES(AUTO_IDSERVICIO.NEXTVAL,VTIPO,VPERIODOPAGO);
			DBMS_OUTPUT.PUT_LINE('SE HA INGRESADO EL SERVICIO: '||VTIPO);	
			COMMIT;	
END ALTA_SERVCIO;
/

--3RA PARTE: BAJAS

CREATE OR REPLACE PROCEDURE BAJA_SERVCIO(VIDSERVICIO IN NUMBER)
AS
BEGIN
	DELETE FROM SERVICIO WHERE IDSERVICIO=VIDSERVICIO;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO SE ELIMINÓ SERVICIO ALGUNO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('HA SIDO ELIMINADO EL SERVICIO');
		COMMIT;
	END IF;
END BAJA_SERVCIO;
/


--4TA PARTE: CAMBIOS
CREATE OR REPLACE PROCEDURE ACTUALIZA_SERVCIO(VIDSERVICIO IN NUMBER,VTIPO IN VARCHAR2,VPERIODOPAGO IN NUMBER)
AS
BEGIN
	UPDATE SERVICIO SET TIPO=VTIPO,PERIODOPAGO=VPERIODOPAGO
		WHERE IDSERVICIO=VIDSERVICIO;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL SERVICIO A ACTUALIZAR');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ACTUALIZÓ EL SERVICIO');
		COMMIT;
	END IF;
END ACTUALIZA_SERVCIO;
/
--#########################################################################################
--SERVICIOS
--#########################################################################################


--#########################################################################################
--NIVEL
--#########################################################################################
--1ERA PARTE: SECUENCIA NIVELES
CREATE SEQUENCE AUTO_IDNIVEL 
INCREMENT BY 1 MINVALUE 10000001;

--PROCEDIMIENTO ALTA DE NIVEL
CREATE OR REPLACE PROCEDURE ALTA_NIVEL(NIVEL$ IN VARCHAR2)
AS
	NIVEL_ACTUAL$ 	VARCHAR2(45);
BEGIN
	SELECT NIVEL INTO NIVEL_ACTUAL$ FROM NIVEL 
	WHERE NIVEL=NIVEL$;
	IF(NIVEL_ACTUAL$ IS NOT NULL) THEN
		DBMS_OUTPUT.PUT_LINE('EL SERVICIO YA EXISTE, NO PUEDE SER DUPLICADO');
	END IF;
	EXCEPTION
	WHEN NO_DATA_FOUND THEN
		INSERT INTO NIVEL(IDNIVEL,NIVEL) VALUES(AUTO_IDNIVEL.NEXTVAL,NIVEL$);
		DBMS_OUTPUT.PUT_LINE('SE HA AGREGADO EL NIVEL:'||NIVEL$);
		COMMIT;
END ALTA_NIVEL;
/

--PROCEDIMIENTO PARA BAJA DE NIVEL
CREATE OR REPLACE PROCEDURE BAJA_NIVEL(IDNIVEL$ IN NUMBER)
AS
BEGIN
	DELETE FROM NIVEL WHERE IDNIVEL=IDNIVEL$;
	IF SQL%NOTFOUND THEN 
		DBMS_OUTPUT.PUT_LINE('NO SE ELIMINO EL NIVEL');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ELIMINO EL NIVEL');
	COMMIT;
	END IF;
END BAJA_NIVEL;
/

--PROCEDIMIENTO PARA ACTUALIZAR NIVEL
CREATE OR REPLACE PROCEDURE ACTUALIZA_NIVEL(IDNIVEL$ IN NUMBER,NIVEL$ IN VARCHAR2)
AS
BEGIN
	UPDATE NIVEL SET NIVEL=NIVEL$ WHERE IDNIVEL=IDNIVEL$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NIVEL A ACTUALIZAR');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ACTUALIZO EL NIVEL');
		COMMIT;
	END IF;
END ACTUALIZA_NIVEL;
/
--#########################################################################################
--NIVEL
--#########################################################################################

--#########################################################################################
--NIVEL GRADO
--#########################################################################################

--ALTA DE UN GRADO
CREATE OR REPLACE PROCEDURE ALTA_GRADO(IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER)
AS
	NIVEL$		VARCHAR2(45); 	
BEGIN
	INSERT INTO NIVEL_GRADO(IDNIVEL,IDGRADO) VALUES(IDNIVEL$,IDGRADO$);
	EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
    	SELECT NIVEL INTO NIVEL$ FROM NIVEL WHERE IDNIVEL=IDNIVEL$;
    	DBMS_OUTPUT.PUT_LINE('EL GRADO: '||IDGRADO$||' EN '||IDNIVEL$||'('||NIVEL$||') YA EXISTE');
END ALTA_GRADO;
/

--BAJA DE GRADO
CREATE OR REPLACE PROCEDURE BAJA_GRADO(IDNIVEL$ IN NUMBER,IDGRADO$ NUMBER)
AS
BEGIN
	DELETE FROM NIVEL_GRADO WHERE IDNIVEL=IDNIVEL$ AND IDGRADO=IDGRADO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('EL GRADO NO EXISTE');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL GRADO SE ELIMINO');
	END IF;
	COMMIT;
END BAJA_GRADO;
/

--ACTUALIZACION DE GRADO
CREATE OR REPLACE PROCEDURE ACTUALIZA_GRADO(IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER,NUEVO_IDGRADO$ IN NUMBER)
AS
BEGIN
	UPDATE NIVEL_GRADO SET IDGRADO=NUEVO_IDGRADO$ WHERE IDNIVEL=IDNIVEL$ AND IDGRADO=IDGRADO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NIVEL A ACTUALIZAR');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ACTUALIZO EL NIVEL');
		COMMIT;
	END IF;
END ACTUALIZA_GRADO;
/

--#########################################################################################
--NIVEL GRADO
--#########################################################################################


--#########################################################################################
--GRUPO
--#########################################################################################
--SECUENCIA PARA INSERCIONES EN GRUPO
CREATE SEQUENCE AUTO_IDGRUPO
INCREMENT BY 1 MINVALUE 10000001;



--ALTA GRUPO
CREATE OR REPLACE PROCEDURE ALTA_GRUPO(GRUPO$ IN VARCHAR2,IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER)
AS
	GRUPO_ACTUAL$ 		VARCHAR2(3);
	NIVEL_ACTUAL$ 		VARCHAR2(45);
BEGIN 
	SELECT GRUPO INTO GRUPO_ACTUAL$ FROM GRUPO 	WHERE GRUPO=GRUPO$ AND IDNIVEL=IDNIVEL$ AND IDGRADO=IDGRADO$;
	SELECT NIVEL INTO NIVEL_ACTUAL$ FROM NIVEL  WHERE IDNIVEL=IDNIVEL$;
	IF (GRUPO_ACTUAL$ IS NOT NULL) THEN
			DBMS_OUTPUT.PUT_LINE('EL GRUPO '||GRUPO$||' EN '||IDNIVEL$||'('||NIVEL_ACTUAL$||') Y EL GRADO '||IDGRADO$||' YA EXISTE, NO PUEDE SER DUPLICADO');
	END IF;
	EXCEPTION
	WHEN NO_DATA_FOUND THEN
	INSERT INTO GRUPO(IDGRUPO,GRUPO,IDNIVEL,IDGRADO) VALUES(AUTO_IDGRUPO.NEXTVAL,GRUPO$,IDNIVEL$,IDGRADO$);
	DBMS_OUTPUT.PUT_LINE('EL GRUPO FUE AGREGADO');
	COMMIT;
END  ALTA_GRUPO;
/

--BAJA GRUPO
CREATE OR REPLACE PROCEDURE BAJA_GRUPO(IDGRUPO$ IN NUMBER)
AS
BEGIN
	DELETE FROM GRUPO WHERE IDGRUPO=IDGRUPO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('EL GRUPO NO EXISTE');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL GRUPO HA SIDO ELIMINADO');
		COMMIT;
	END IF;
END BAJA_GRUPO;
/

--ACTUALIZA GRUPO
CREATE OR REPLACE PROCEDURE ACTUALIZA_GRUPO(IDGRUPO$ IN NUMBER,GRUPO$ IN VARCHAR2)
AS
BEGIN
	UPDATE GRUPO SET GRUPO=GRUPO$ WHERE IDGRUPO=IDGRUPO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL GRUPO A ACTUALIZAR');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ACTUALIZO EL GRUPO');
	END IF;
	COMMIT;
END ACTUALIZA_GRUPO;
/
--#########################################################################################
--GRUPO
--#########################################################################################

--#########################################################################################
--GRADO SERVICIO
--#########################################################################################

CREATE OR REPLACE PROCEDURE ALTA_GRADO_SERVICIO(PRECIO$ IN NUMBER,IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER,IDSERVICIO$ IN NUMBER)
AS 
	PRECIO_ACTUAL$ 	NUMBER(11,2);
	REGS_NIVELGRADO$ NUMBER(8);
	REGS_SERVICIO$ NUMBER(8);
BEGIN
	SELECT COUNT(*) INTO REGS_NIVELGRADO$ FROM NIVEL_GRADO;
	SELECT COUNT(*) INTO REGS_SERVICIO$ FROM SERVICIO;
	IF (REGS_NIVELGRADO$ > 0) AND (REGS_SERVICIO$ > 0) THEN
		SELECT PRECIO INTO PRECIO_ACTUAL$ FROM GRADO_SERVICIO WHERE IDNIVEL=IDNIVEL$ AND IDGRADO=IDGRADO$ AND IDSERVICIO=IDSERVICIO$;
		IF(PRECIO_ACTUAL$ IS NOT NULL) THEN
				DBMS_OUTPUT.PUT_LINE('EL PRECIO PARA '||IDSERVICIO$||' EN '||IDGRADO$||' NIVEL ('||IDNIVEL$||') YA EXISTE');
		END IF;
	ELSE
		DBMS_OUTPUT.PUT_LINE('NO HAY REGISTROS PADRES EN TABLA NIVEL_GRADO');
	END IF;

	EXCEPTION
	WHEN NO_DATA_FOUND THEN
		INSERT INTO GRADO_SERVICIO(PRECIO,IDNIVEL,IDGRADO,IDSERVICIO) VALUES(PRECIO$,IDNIVEL$,IDGRADO$,IDSERVICIO$);
		DBMS_OUTPUT.PUT_LINE('SE AGREGO EL PRECIO');
		COMMIT;
END ALTA_GRADO_SERVICIO;
/

CREATE OR REPLACE PROCEDURE BAJA_GRADO_SERVICIO(VIDNIVEL IN NUMBER,VIDGRADO IN NUMBER,VIDSERVICIO IN NUMBER)
AS
BEGIN
	DELETE FROM GRADO_SERVICIO WHERE IDNIVEL=VIDNIVEL AND IDGRADO=VIDGRADO AND IDSERVICIO=VIDSERVICIO;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO SE ELIMINÓ GRADO_SERVICIO ALGUNO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('HA SIDO ELIMINADO EL GRADO_SERVICIO');
		COMMIT;
	END IF;
END BAJA_GRADO_SERVICIO;
/


CREATE OR REPLACE PROCEDURE ACTUALIZA_GRADO_SERVICIO(VIDNIVEL IN NUMBER,VIDGRADO IN NUMBER,VIDSERVICIO IN NUMBER,VPRECIO IN NUMBER)
AS
BEGIN
	UPDATE GRADO_SERVICIO SET PRECIO=VPRECIO
		WHERE IDNIVEL=VIDNIVEL AND IDGRADO=VIDGRADO AND IDSERVICIO=VIDSERVICIO;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL SERVICIO A ACTUALIZAR');
	ELSE
		DBMS_OUTPUT.PUT_LINE('SE ACTUALIZÓ EL SERVICIO');
		COMMIT;
	END IF;
END ACTUALIZA_GRADO_SERVICIO;
/
--#########################################################################################
--GRADO SERVICIO
--#########################################################################################

DROP SEQUENCE AUTO_IDSERVICIO;
DROP SEQUENCE AUTO_IDGRUPO;
DROP SEQUENCE AUTO_IDNIVEL;

CREATE SEQUENCE AUTO_IDSERVICIO INCREMENT BY 1 MINVALUE 10000001;
CREATE SEQUENCE AUTO_IDGRUPO INCREMENT BY 1 MINVALUE 10000001;
CREATE SEQUENCE AUTO_IDNIVEL INCREMENT BY 1 MINVALUE 10000001;

--#####################CONTROL###################################
--SERVICES
--CODIFICACION 10 #SERVICIO 000 #DE PAGOS 10-000: 10000
EXEC ALTA_SERVCIO('COLEGIATURA',1);
EXEC ALTA_SERVCIO('COLEGIATURA',2);
EXEC ALTA_SERVCIO('COLEGIATURA',3);
EXEC ALTA_SERVCIO('COLEGIATURA',6);
EXEC ALTA_SERVCIO('COLEGIATURA',10);
EXEC ALTA_SERVCIO('COLEGIATURA',12);
EXEC ALTA_SERVCIO('INSCRIPCION',1);
EXEC ALTA_SERVCIO('MATERIAL ESCOLAR',1);
EXEC ALTA_SERVCIO('UNIFORME',1);
EXEC ALTA_SERVCIO('LIBROS',1);
EXEC ALTA_SERVCIO('SEGURO MEDICO',1);
EXEC ALTA_SERVCIO('TRANSPORTE',1);


--NIVEL
EXEC ALTA_NIVEL('PREESCOLAR');
EXEC ALTA_NIVEL('PRIMARIA');
EXEC ALTA_NIVEL('SECUNDARIA');
EXEC ALTA_NIVEL('PREPARATORIA');

--NO HAY NIVEL 10000000
--NIVEL_GRADO
--PREESCOLAR
EXEC ALTA_GRADO(10000001,1);
EXEC ALTA_GRADO(10000001,2);
--PRIMARIA
EXEC ALTA_GRADO(10000002,1);
EXEC ALTA_GRADO(10000002,2);
EXEC ALTA_GRADO(10000002,3);
EXEC ALTA_GRADO(10000002,4);
EXEC ALTA_GRADO(10000002,5);
EXEC ALTA_GRADO(10000002,6);
--SECUNDARIA
EXEC ALTA_GRADO(10000003,1);
EXEC ALTA_GRADO(10000003,2);
EXEC ALTA_GRADO(10000003,3);
--PREPARATORIA
EXEC ALTA_GRADO(10000004,1);
EXEC ALTA_GRADO(10000004,2);
EXEC ALTA_GRADO(10000004,3);

--GRUPO
--GRUPO A,B DE PREESCOLAR 1
EXEC ALTA_GRUPO('A',10000001,1);
EXEC ALTA_GRUPO('B',10000001,1);
--INSERT INTO GRUPO(IDGRUPO,GRUPO,IDNIVEL,IDGRADO) VALUES(11112,'B',10000,1);

--GRUPOS A,B DE PREESCOLAR 2
EXEC ALTA_GRUPO('A',10000001,2);
EXEC ALTA_GRUPO('B',10000001,2);
--INSERT INTO GRUPO(IDGRUPO,GRUPO,IDNIVEL,IDGRADO) VALUES(11121,'B',10000,2);

--GRUPOS A DE PRIMARIA 
EXEC ALTA_GRUPO('A',10000002,1);
EXEC ALTA_GRUPO('A',10000002,2);
EXEC ALTA_GRUPO('A',10000002,3);
EXEC ALTA_GRUPO('A',10000002,4);
EXEC ALTA_GRUPO('A',10000002,5);
EXEC ALTA_GRUPO('A',10000002,6);
--GRUPOS B DE PRIMARIA
EXEC ALTA_GRUPO('B',10000002,1);
EXEC ALTA_GRUPO('B',10000002,2);
EXEC ALTA_GRUPO('B',10000002,3);
EXEC ALTA_GRUPO('B',10000002,4);
EXEC ALTA_GRUPO('B',10000002,5);
EXEC ALTA_GRUPO('B',10000002,6);

--GRUPOS A,B DE SECUNDARIA PRIMER AÑO
EXEC ALTA_GRUPO('A',10000003,1);
EXEC ALTA_GRUPO('B',10000003,1);

--GRUPOS A,B DE SECUNDARIA SEGUNDO AÑO
EXEC ALTA_GRUPO('A',10000003,2);
EXEC ALTA_GRUPO('B',10000003,2);

--GRUPOS A,B DE SECUNDARIA TERCER AÑO
EXEC ALTA_GRUPO('A',10000003,3);
EXEC ALTA_GRUPO('B',10000003,3);

--GRUPOS DE PREPARATORIA
--GRUPOS A,B DE PRIMERO
EXEC ALTA_GRUPO('A',10000004,1);
EXEC ALTA_GRUPO('B',10000004,1);
EXEC ALTA_GRUPO('C',10000004,1);

--GRUPOS A,B DE SEGUNDO
EXEC ALTA_GRUPO('A',10000004,2);
EXEC ALTA_GRUPO('B',10000004,2);
EXEC ALTA_GRUPO('C',10000004,2);

--GRUPOS A,B DE TERCERO
EXEC ALTA_GRUPO('A',10000004,3);
EXEC ALTA_GRUPO('B',10000004,3);
EXEC ALTA_GRUPO('C',10000004,3);


--GRADO_SERVICIO
--PREESCOLAR
EXEC ALTA_GRADO_SERVICIO(72000,10000001,1,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000001,1,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000001,1,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000001,1,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000001,1,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000001,1,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000001,1,10000007);
EXEC ALTA_GRADO_SERVICIO(2500,10000001,1,10000008);
EXEC ALTA_GRADO_SERVICIO(1000,10000001,1,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000001,1,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000001,1,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000001,1,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000001,2,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000001,2,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000001,2,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000001,2,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000001,2,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000001,2,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000001,2,10000007);
EXEC ALTA_GRADO_SERVICIO(2500,10000001,2,10000008);
EXEC ALTA_GRADO_SERVICIO(1000,10000001,2,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000001,2,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000001,2,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000001,2,10000012);


--PRIMARIA
EXEC ALTA_GRADO_SERVICIO(72000,10000002,1,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,1,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,1,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,1,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,1,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,1,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,1,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,1,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,1,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,1,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,1,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,1,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000002,2,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,2,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,2,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,2,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,2,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,2,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,2,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,2,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,2,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,2,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,2,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,2,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000002,3,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,3,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,3,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,3,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,3,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,3,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,3,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,3,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,3,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,3,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,3,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,3,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000002,4,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,4,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,4,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,4,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,4,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,4,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,4,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,4,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,4,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,4,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,4,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,4,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000002,5,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,5,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,5,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,5,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,5,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,5,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,5,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,5,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,5,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,5,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,5,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,5,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000002,6,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000002,6,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000002,6,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000002,6,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000002,6,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000002,6,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000002,6,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000002,6,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000002,6,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000002,6,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000002,6,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000002,6,10000012);

--SECUNDARIA
EXEC ALTA_GRADO_SERVICIO(72000,10000003,1,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000003,1,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000003,1,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000003,1,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000003,1,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000003,1,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000003,1,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000003,1,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000003,1,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000003,1,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000003,1,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000003,1,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000003,2,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000003,2,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000003,2,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000003,2,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000003,2,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000003,2,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000003,2,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000003,2,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000003,2,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000003,2,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000003,2,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000003,2,10000012);

EXEC ALTA_GRADO_SERVICIO(72000,10000003,3,10000001);
EXEC ALTA_GRADO_SERVICIO(36000,10000003,3,10000002);
EXEC ALTA_GRADO_SERVICIO(24000,10000003,3,10000003);
EXEC ALTA_GRADO_SERVICIO(12000,10000003,3,10000004);
EXEC ALTA_GRADO_SERVICIO(7200,10000003,3,10000005);
EXEC ALTA_GRADO_SERVICIO(6000,10000003,3,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000003,3,10000007);
EXEC ALTA_GRADO_SERVICIO(2700,10000003,3,10000008);
EXEC ALTA_GRADO_SERVICIO(1500,10000003,3,10000009);
EXEC ALTA_GRADO_SERVICIO(2000,10000003,3,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000003,3,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000003,3,10000012);


--PREPARATORIA
EXEC ALTA_GRADO_SERVICIO(68400,10000004,1,10000001);
EXEC ALTA_GRADO_SERVICIO(34200,10000004,1,10000002);
EXEC ALTA_GRADO_SERVICIO(22800,10000004,1,10000003);
EXEC ALTA_GRADO_SERVICIO(11400,10000004,1,10000004);
EXEC ALTA_GRADO_SERVICIO(6840,10000004,1,10000005);
EXEC ALTA_GRADO_SERVICIO(5700,10000004,1,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,1,10000007);
EXEC ALTA_GRADO_SERVICIO(2000,10000004,1,10000008);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,1,10000009);
EXEC ALTA_GRADO_SERVICIO(5000,10000004,1,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000004,1,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000004,1,10000012);

EXEC ALTA_GRADO_SERVICIO(68400,10000004,2,10000001);
EXEC ALTA_GRADO_SERVICIO(34200,10000004,2,10000002);
EXEC ALTA_GRADO_SERVICIO(22800,10000004,2,10000003);
EXEC ALTA_GRADO_SERVICIO(11400,10000004,2,10000004);
EXEC ALTA_GRADO_SERVICIO(6840,10000004,2,10000005);
EXEC ALTA_GRADO_SERVICIO(5700,10000004,2,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,2,10000007);
EXEC ALTA_GRADO_SERVICIO(2000,10000004,2,10000008);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,2,10000009);
EXEC ALTA_GRADO_SERVICIO(5000,10000004,2,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000004,2,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000004,2,10000012);

EXEC ALTA_GRADO_SERVICIO(68400,10000004,3,10000001);
EXEC ALTA_GRADO_SERVICIO(34200,10000004,3,10000002);
EXEC ALTA_GRADO_SERVICIO(22800,10000004,3,10000003);
EXEC ALTA_GRADO_SERVICIO(11400,10000004,3,10000004);
EXEC ALTA_GRADO_SERVICIO(6840,10000004,3,10000005);
EXEC ALTA_GRADO_SERVICIO(5700,10000004,3,10000006);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,3,10000007);
EXEC ALTA_GRADO_SERVICIO(2000,10000004,3,10000008);
EXEC ALTA_GRADO_SERVICIO(10000,10000004,3,10000009);
EXEC ALTA_GRADO_SERVICIO(5000,10000004,3,10000010);
EXEC ALTA_GRADO_SERVICIO(1000,10000004,3,10000011);
EXEC ALTA_GRADO_SERVICIO(340,10000004,3,10000012);

--#####################CONTROL###################################

--#####################MARCA16MAYO11#############################
CREATE SEQUENCE AUTO_IDRESPONSABLE INCREMENT BY 1 MINVALUE 10000001;
--PROCEDIMIENTOS PARA DAR DE ALTA A UN RESPONSABLE
CREATE OR REPLACE PROCEDURE ALTA_RESPONSABLE
(NOMBRERESP$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,EDAD$ IN NUMBER,PARENTESCO$ IN VARCHAR2,CALLE$ IN VARCHAR2,COLONIA$ IN VARCHAR2,NUMERO$ IN NUMBER,MOVIL$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
	IDRESPONSABLE_AUX  		NUMBER(8);
	AUTO_IDRESPONSABLE_AUX 	NUMBER(8);
BEGIN
	SELECT AUTO_IDRESPONSABLE.NEXTVAL INTO AUTO_IDRESPONSABLE_AUX FROM DUAL;
	INSERT INTO RESPONSABLE(IDRESPONSABLE,NOMBRERESP,APELLIDOP,APELLIDOM,SEXO,EDAD,PARENTESCO,CALLE,COLONIA,NUMERO,MOVIL)
	VALUES(AUTO_IDRESPONSABLE_AUX,NOMBRERESP$,APELLIDOP$,APELLIDOM$,SEXO$,EDAD$,PARENTESCO$,CALLE$,COLONIA$,NUMERO$,MOVIL$);
	
	SELECT IDRESPONSABLE INTO IDRESPONSABLE_AUX FROM RESPONSABLE WHERE IDRESPONSABLE=AUTO_IDRESPONSABLE_AUX;

	INSERT INTO TELEFONOHORARIO(IDRESPONSABLE,TELEFONO,HORARIO)
	VALUES(IDRESPONSABLE_AUX,TELEFONO$,HORARIO$);

	DBMS_OUTPUT.PUT_LINE('RESPONSABLE AGREGADO: '||IDRESPONSABLE_AUX);
END ALTA_RESPONSABLE;
/

--########################ALTA DE NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE AGREGAR_TELEFONO_RESPONSABLE(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
BEGIN
	INSERT INTO TELEFONOHORARIO(IDRESPONSABLE,TELEFONO,HORARIO)VALUES(IDRESPONSABLE$,TELEFONO$,HORARIO$);
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUEVO NUMERO HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END AGREGAR_TELEFONO_RESPONSABLE;
/

--########################ALTA DE NUMERO TELEFONICO PARA UN RESPONSABLE############################

--PROCEDIMIENTO PARA DAR DE BAJA UN RESPONSABLE
CREATE OR REPLACE PROCEDURE BAJA_RESPONSABLE(IDRESPONSABLE$ IN NUMBER)
AS
BEGIN
	DELETE FROM RESPONSABLE WHERE IDRESPONSABLE=IDRESPONSABLE$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL RESPONSABLE HA SIDO ELIMINADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END BAJA_RESPONSABLE;
/

--########################ELIMINA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE ELIMINA_TELEFONO_RESPONSABLE(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER)
AS
BEGIN
	DELETE FROM TELEFONOHORARIO WHERE IDRESPONSABLE=IDRESPONSABLE$ AND TELEFONO=TELEFONO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NUMERO DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUMERO HA SIDO ELIMINADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ELIMINA_TELEFONO_RESPONSABLE;
/

--PROCEDIMIENTO PARA ACTUALIZAR LOS DATOS DE UN RESPONSABLE
CREATE OR REPLACE PROCEDURE ACTUALIZA_RESPONSABLE(IDRESPONSABLE$ IN NUMBER,NOMBRERESP$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,EDAD$ IN NUMBER,PARENTESCO$ IN VARCHAR2,CALLE$ IN VARCHAR2,COLONIA$ IN VARCHAR2,NUMERO$ IN NUMBER,MOVIL$ IN NUMBER)
AS
BEGIN
	UPDATE RESPONSABLE SET NOMBRERESP=NOMBRERESP$,APELLIDOP=APELLIDOP$,APELLIDOM=APELLIDOM$,SEXO=SEXO$,EDAD=EDAD$,PARENTESCO=PARENTESCO$,CALLE=CALLE$,COLONIA=COLONIA$,NUMERO=NUMERO$,MOVIL=MOVIL$ WHERE IDRESPONSABLE=IDRESPONSABLE$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL RESPONSABLE HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ACTUALIZA_RESPONSABLE;
/
--########################ACTUALIZA HORARIO PARA UN NUMERO TELEFONICO PARA UN RESPONSABLE############################
CREATE OR REPLACE PROCEDURE ACTUALIZA_HORARIO_TEL_RES(IDRESPONSABLE$ IN NUMBER,TELEFONO$ IN NUMBER,HORARIO$ IN VARCHAR2)
AS
BEGIN
	UPDATE TELEFONOHORARIO SET HORARIO=HORARIO$ WHERE IDRESPONSABLE=IDRESPONSABLE$ AND TELEFONO=TELEFONO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE EL NUMERO DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL NUMERO HA SIDO ACTUALIZADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ACTUALIZA_HORARIO_TEL_RES;
/
--$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$TUTOR$$$$$$$$$$$$$$$$$$$$$$$$$$$$
CREATE OR REPLACE PROCEDURE ALTA_TUTOR(IDRESPONSABLE$ IN NUMBER,RFC$ IN CHAR)
AS
BEGIN
	INSERT INTO TUTOR(IDRESPONSABLE,RFC)VALUES(IDRESPONSABLE$,RFC$);
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTEN LOS DATOS DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL TUTOR HA SIDO AGREGADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END ALTA_TUTOR;
/

CREATE OR REPLACE PROCEDURE BAJA_TUTOR(RFC$ IN CHAR)
AS
BEGIN
	DELETE FROM TUTOR WHERE RFC=RFC$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTEN LOS DATOS DEL RESPONSABLE SOLICITADO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('EL TUTOR HA SIDO AGREGADO SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END BAJA_TUTOR;
/


--##################### PROCEDURES DE ALUMNO #############################
--SEQUENCIA PARA ID DE ALUMNO
CREATE SEQUENCE AUTO_IDALUMNO INCREMENT BY 1 MINVALUE 10000001;

--PROCEDIMIENTOS PARA DAR DE ALTA A UN ALUMNO
CREATE OR REPLACE PROCEDURE ALTA_ALUMNO
(CURP$ IN VARCHAR2,NOMBREALU$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,FECHANAC$ IN DATE,ESTADO$ IN VARCHAR2,MUNICIPIO$ IN VARCHAR2,RFC$ IN CHAR)
AS
	AUTO_IDALUMNO_AUX 	NUMBER(8);
BEGIN
	IF TRUNC(MONTHS_BETWEEN(SYSDATE,FECHANAC$),2) > 24 THEN		
		SELECT AUTO_IDALUMNO.NEXTVAL INTO AUTO_IDALUMNO_AUX FROM DUAL;
		INSERT INTO ALUMNO(IDALUMNO,CURP,NOMBREALU,APELLIDOP,APELLIDOM,SEXO,FECHANAC,ESTADO,MUNICIPIO,RFC)
		VALUES(AUTO_IDALUMNO_AUX,CURP$,NOMBREALU$,APELLIDOP$,APELLIDOM$,SEXO$,FECHANAC$,ESTADO$,MUNICIPIO$,RFC$);
		DBMS_OUTPUT.PUT_LINE('ALUMNO AGREGADO: '||AUTO_IDALUMNO_AUX);
		COMMIT;
	ELSE
		DBMS_OUTPUT.PUT_LINE('FECHA DE NACIMIENTO INVALIDA');
	END IF;
END ALTA_ALUMNO;
/


--PROCEDIMIENTOS PARA DAR DE BAJA A UN ALUMNO
CREATE OR REPLACE PROCEDURE BAJA_ALUMNO(IDALUMNO$ IN NUMBER)
AS
BEGIN
	DELETE FROM ALUMNO WHERE IDALUMNO=IDALUMNO$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO SE ELIMINÓ ALUMNO ALGUNO');
	ELSE
		DBMS_OUTPUT.PUT_LINE('HA SIDO ELIMINADO EL ALUMNO');
		COMMIT;
	END IF;
END BAJA_ALUMNO;
/

--PROCEDIMIENTOS PARA ACTUALIZAR A UN ALUMNO
CREATE OR REPLACE PROCEDURE ACTUALIZA_ALUMNO
(IDALUMNO$ IN NUMBER,CURP$ IN VARCHAR2,NOMBREALU$ IN VARCHAR2,APELLIDOP$ IN VARCHAR2,APELLIDOM$ IN VARCHAR2,SEXO$ IN CHAR,FECHANAC$ IN DATE,ESTADO$ IN VARCHAR2,MUNICIPIO$ IN VARCHAR2,RFC$ IN CHAR)
AS
BEGIN
	IF TRUNC(MONTHS_BETWEEN(SYSDATE,FECHANAC$),2) > 24 THEN	
		UPDATE ALUMNO SET CURP=CURP$,NOMBREALU=NOMBREALU$,APELLIDOP=APELLIDOP$,APELLIDOM=APELLIDOM$,SEXO=SEXO$,FECHANAC=FECHANAC$,ESTADO=ESTADO$,MUNICIPIO=MUNICIPIO$,RFC=RFC$
			WHERE IDALUMNO=IDALUMNO$;
		IF SQL%NOTFOUND THEN
			DBMS_OUTPUT.PUT_LINE('NO EXISTE EL ALUMNO A ACTUALIZAR');
		ELSE
			DBMS_OUTPUT.PUT_LINE('SE ACTUALIZÓ EL ALUMNO');
			COMMIT;
		END IF;
	ELSE
		DBMS_OUTPUT.PUT_LINE('FECHA DE NACIMIENTO INVALIDA');
	END IF;	
END ACTUALIZA_ALUMNO;
/


--#############MARCA#################################################################


--NO PROBADOS
--CREA SECUNCIA PARA INSCRIPCIONES
CREATE SEQUENCE AUTO_IDINSCRIPCION INCREMENT BY 1 MINVALUE 10000001;
--PROCEDIMIENTO PARA INSCRIBIR ALUMNO
CREATE OR REPLACE PROCEDURE INSCRIBIR_ALUMNO(IDALUMNO$ IN NUMBER,IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER,MENSUALIDADESCOLEGIATURA$ IN NUMBER)
AS 
	ANO_ACTUAL 		NUMBER(5);
	ANO_SIG 		NUMBER(5);
	CICLOESCOLAR$  	VARCHAR2(45);
	FECHAINSCRIPCION$ DATE;
BEGIN	
		SELECT EXTRACT(YEAR FROM SYSDATE) INTO ANO_ACTUAL FROM DUAL;
		SELECT EXTRACT(YEAR FROM (SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL)) INTO ANO_SIG FROM DUAL;
		SELECT TO_DATE(SYSDATE,'DD/MM/YYYY') INTO FECHAINSCRIPCION$ FROM DUAL;
		CICLOESCOLAR$:=ANO_ACTUAL||'-'||ANO_SIG;
		INSERT INTO INSCRIPCION(IDINSCRIPCION,CICLOESCOLAR,FECHAINSCRIPCION,MENSUALIDADESCOLEGIATURA,IDALUMNO,IDNIVEL,IDGRADO)
		VALUES(AUTO_IDINSCRIPCION.NEXTVAL,CICLOESCOLAR$,FECHAINSCRIPCION$,MENSUALIDADESCOLEGIATURA$,IDALUMNO$,IDNIVEL$,IDGRADO$);  
END INSCRIBIR_ALUMNO;
/

--PROCEDIMIENTO PARA DAR DE BAJA A UN ALUMNO 
CREATE OR REPLACE PROCEDURE DAR_DE_BAJA_ALUMNO(IDINSCRIPCION$ IN NUMBER)
AS
BEGIN
	DELETE FROM INSCRIPCION WHERE IDINSCRIPCION=IDINSCRIPCION$;
	IF SQL%NOTFOUND THEN
		DBMS_OUTPUT.PUT_LINE('NO EXISTE LA INSCRIPCION SOLICITADA');
	ELSE
		DBMS_OUTPUT.PUT_LINE('LA INSCRIPCION HA SIDO ELIMINADA SATISFACTORIAMENTE');
		COMMIT;
	END IF;
END DAR_DE_BAJA_ALUMNO;
/


--###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$



COMMIT;

EXIT